package thread;
class MyThread extends Thread{
    @Override
    /*继承不是目的,为的是重写run
    像run这样的函数,用户手动定义了,但是没有手动调用,最终这个方法被系统/库/框架进行调用了
    此时这样的方法,就称为"回调函数*/

    public void run(){
        while(true){
            System.out.println("hello thread");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }

    }
}
public class Demo1 {
    //调用一个main方法的线程称为"主线程",一个进程至少一个线程,这个至少一个的线程就是主线程
    public static void main(String[] args) throws InterruptedException {
        MyThread myThread=new MyThread();
        //创建线程,这个线程和主线程并发/并行在CPU上执行
        myThread.start();
        while (true){
            System.out.println("hello main");
            Thread.sleep(1000);
        }


        //调用start就会在进程内部,创建出一个新的线程,新的线程会执行run里面的代码
    }
}
//多个线程之间,谁先去CPU上上执行调度,这个过程是"不确定的"(不是数学意义的随机)
// 而是这个调度顺序取决于操作系统,内核里的"调度器"的实现,调度器里有一套规则,
// 但是作为应用程序开发,没法进行干预,也感受不到

